#ifndef _BOAT_DATADEF_H_
#define _BOAT_DATADEF_H_

#include <stdio.h>
#include <stdlib.h>
#include <ctime>
#include <sys/time.h>
#include <stdint.h>

// 任务项结构体
typedef struct 
{
    uint16_t  command;      // 命令类型，16表示航点
    uint8_t   seq;          // 序号
    float     param1;       // 速度, m/s
    float     param2;       // 等待时间, s
    float     param3;       // 备用参数
    float     param4;       // 备用参数
    float     lat;          // 纬度, deg
    float     lon;          // 经度, deg
    float     alt;          // 高度, m
    uint8_t   reserve[6];   // 保留字段
} MissionItem;

// 执行器控制结构体
typedef struct {
    float     steer_l;      // 左舵角, deg
    float     steer_r;      // 右舵角, deg
    float     motor_l;      // 左电机转速, rpm
    float     motor_r;      // 右电机转速, rpm
    float     bucket_l;     // 左推进器角度, deg
    float     bucket_r;     // 右推进器角度, deg
    uint8_t   reserve[6];   // 保留字段
} actuator_control;

// 运动学状态结构体
typedef struct {
    uint8_t   kind;         // 设备类型
    uint8_t   num;          // 设备编号
    double    lat;          // 纬度, deg
    double    lon;          // 经度, deg
    double    alt;          // 高度/航向, deg (这里复用为航向角)
    float     roll;         // 横滚角, deg
    float     pitch;        // 俯仰角, deg
    float     yaw;          // 偏航角, deg
    float     rollspeed;    // 横滚角速度, deg/s
    float     pitchspeed;   // 俯仰角速度, deg/s
    float     yawspeed;     // 偏航角速度, deg/s
    float     vx;           // X方向速度, m/s
    float     vy;           // Y方向速度, m/s
    float     vz;           // Z方向速度, m/s
    float     xacc;         // X方向加速度, m/s²
    float     yacc;         // Y方向加速度, m/s²
    float     zacc;         // Z方向加速度, m/s²
    uint8_t   reserve[6];   // 保留字段
} kinematic_state;

// 任务控制结构体
typedef struct {
    uint8_t     mission_num;    // 任务点数量
    MissionItem mission[128];   // 任务点数组（减少到128个）
    uint8_t     reserve[6];     // 保留字段
} mission_control;

// 变换状态结构体 - 新增
typedef struct {
    double    HomePos[4];       // 原点位置 [lat, lon, alt, yaw]
    double    PosEarth[4];      // 地球坐标系位置 [lat, lon, alt, yaw]
    double    PostoHome[4];     // 相对原点位置 [lat, lon, alt, yaw]
    float     VelEarth[4];      // 地球坐标系速度 [vx, vy, vz, vyaw]
    float     VelPolar[4];      // 极坐标速度 [speed, course, vz, vyaw]
    float     VelBody[4];       // 载体坐标系速度 [vx, vy, vz, vyaw]
} TransState;

// 航向速度控制结构体 - 新增
typedef struct {
    uint8_t   model;           // 控制模式
    float     heading;         // 目标航向, deg
    float     velocity;        // 目标速度, m/s
    uint8_t   reserve[6];      // 保留字段
} headvel_control;

#endif // _BOAT_DATADEF_H_